﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// Open Closed fout
namespace OCF
{
    /// <summary>
    /// Wanneer een nieuwe customer type toegevoegd moet worden moet 
    /// je deze klasse aanpassen en dat is niet volgens het open closed principe
    /// </summary>
    class Customer
    {
        private int _CustType;

        public int CustType
        {
            get { return _CustType; }
            set { _CustType = value; }
        }

        public double getDiscount(double TotalSales)
        {
            if (_CustType == 1)
            {
                return TotalSales - 100;
            }
            else
            {
                return TotalSales - 50;
            }
        }
    }
}

// Open Closed goed
namespace OCG
{
    /// <summary>
    /// De klassen worden gescheiden in losse klassen
    /// wanneer een costumer wordt toegevoegd kan je simpelweg een klasse toevoegen.
    /// </summary>
    class Customer
    {
        public virtual double getDiscount(double TotalSales)
        {
            return TotalSales;
        }

        public virtual void Add()
        {
        }
    }

    class SilverCustomer : Customer
    {
        public override double getDiscount(double TotalSales)
        {
            return base.getDiscount(TotalSales) - 50;
        }

        public override void Add()
        {
            base.Add();
        }
    }

    class goldCustomer : Customer
    {
        public override double getDiscount(double TotalSales)
        {
            return base.getDiscount(TotalSales) - 100;
        }

        public override void Add()
        {
            base.Add();
        }
    }
}
